package com.example.myxm.auth;


import android.content.Context;
import android.content.SharedPreferences;

import  com.example.myxm.module.UserBean;


/**
 * LoginManager 负责统一处理“登录状态”的存取与查询，
 * 通过 SharedPreferences 保存用户登录标志与用户信息，
 * 提供静态方法供全局调用。
 */
public class LoginManager {

    public static final String SP_NAME = "login_prefs";
    public static final String KEY_IS_LOGGED_IN = "is_logged_in";
    public static final String KEY_USER_ID      = "user_id";
    public static final String KEY_USERNAME     = "username";
    public static final String KEY_PHONE        = "phone";

    public static final int RESULT_CODE    = 200;
    public static final int RESULT_FAILURE  = 400;

    private LoginManager() {
    }

    /**
     * 登录成功后调用，将用户登录状态及必要信息保存到 SharedPreferences。
     *
     * @param context 应用上下文，用于获取 SharedPreferences
     * @param user    登录成功后从数据库或后端拿到的 UserBean（包含 id/username/phone）
     */
    public static void saveLogin(Context context, UserBean user) {
        if (context == null || user == null) return;

        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putBoolean(KEY_IS_LOGGED_IN, true);
        editor.putInt(KEY_USER_ID, user.getId());
        editor.putString(KEY_USERNAME, user.getUsername());
        editor.putString(KEY_PHONE, user.getPhone());
        editor.apply();
    }

    /**
     * 判断当前是否有用户已登录。
     *
     * @param context 应用上下文，用于获取 SharedPreferences
     * @return 如果 SharedPreferences 中 is_logged_in 为 true，则返回 true；否则返回 false
     */
    public static boolean isLoggedIn(Context context) {
        if (context == null) return false;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        return sp.getBoolean(KEY_IS_LOGGED_IN, false);
    }

    /**
     * 获取当前登录用户的 ID，如果没有登录则返回 -1。
     *
     * @param context 应用上下文
     * @return 当前登录用户的 userId；如果未登录或 SharedPreferences 中无此值，则返回 -1
     */
    public static int getCurrentUserId(Context context) {
        if (!isLoggedIn(context)) return -1;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        return sp.getInt(KEY_USER_ID, -1);
    }

    /**
     * 获取当前登录用户的用户名，如果没有登录则返回 null。
     *
     * @param context 应用上下文
     * @return 当前登录用户的 username；如果未登录或 SharedPreferences 中无此值，则返回 null
     */
    public static String getCurrentUsername(Context context) {
        if (!isLoggedIn(context)) return null;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        return sp.getString(KEY_USERNAME, null);
    }

    /**
     * 获取当前登录用户的手机号，如果没有登录则返回 null。
     *
     * @param context 应用上下文
     * @return 当前登录用户的 phone；如果未登录或 SharedPreferences 中无此值，则返回 null
     */
    public static String getCurrentPhone(Context context) {
        if (!isLoggedIn(context)) return null;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        return sp.getString(KEY_PHONE, null);
    }

    /**
     * 退出登录时调用，清除 SharedPreferences 中的登录信息。
     *
     * @param context 应用上下文
     */
    public static void logout(Context context) {
        if (context == null) return;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putBoolean(KEY_IS_LOGGED_IN, false);
        editor.remove(KEY_USER_ID);
        editor.remove(KEY_USERNAME);
        editor.remove(KEY_PHONE);
        editor.apply();
    }

    /**
     * 清理 SharedPreferences 中所有登录相关字段（更彻底的登出方式）。
     * 与 logout() 等价，二者任选其一即可。
     *
     * @param context 应用上下文
     */
    public static void clearAll(Context context) {
        if (context == null) return;
        SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        editor.apply();
    }
}
